home *** CD-ROM | disk | FTP | other *** search
- #include <StdLib.h>
- #include "CursorBalloon.h"
- #include "FabWmemman.h"
- #include "FabWList.h"
-
- typedef struct fabwlist FabWList;
-
- struct fabwlist {
- FabWList *ptr; // next in list
- DialogRef d; // OS window
- FabWindowPtr f; // my data
- };
-
- FabWList startOfWList = { nil, nil, nil };
-
- FabWindowPtr AddWindowToList(DialogRef d)
- {
- FabWList *newElem;
-
- newElem = ffcalloc(sizeof(struct fabwlist) + sizeof(struct FabWindowRec));
- newElem->ptr = startOfWList.ptr;
- startOfWList.ptr = newElem;
-
- newElem->d = d;
- if (GetWindowKind(d) != kDialogWindowKind)
- SetWindowKind(d, kFabWindowClass);
-
- //newElem->f = ffcalloc(sizeof(struct FabWindowRec));
- newElem->f = (FabWindowPtr)(newElem + 1);
- Zones(newElem->f) = (RgnBalloonCursHandle)NewHandle(0);
- // not needed because we allocate the structure with ffcalloc
- /*
- SetActivate(w, nil);
- SetUpdate(w, nil);
- SetDrag(w, nil);
- SetGrow(w, nil);
- SetZoom(w, nil);
- SetGoAway(w, nil);
- SetContent(w, nil);
- NumObjects(w) = 0;
- */
- return newElem->f;
- }
-
- void RemoveWindowFromList(DialogRef d)
- {
- FabWList *newElem = &startOfWList;
- register RgnBalloonCursHandle tempH;
- register RgnBalloonCursPtr spanPtr;
- register unsigned long i;
-
-
- while (newElem->ptr) {
- if (newElem->ptr->d == d) {
- tempH = Zones(newElem->ptr->f);
- HLock((Handle)tempH);
- spanPtr = *tempH;
-
- for (i = 0; i < NumObjects(newElem->ptr->f); i++, spanPtr++) {
- DisposeRgn(spanPtr->zoneLocal);
- DisposeRgn(spanPtr->zoneGlobal);
- // we do nothing with the CursHandles since they might be system cursors
- }
- DisposeHandle((Handle)tempH);
- // the caller knows whether CloseWindow or CloseDialog is to be called
- // ffree(newElem->ptr->f);
- ffree(newElem->ptr);
- newElem->ptr = newElem->ptr->ptr;
- break;
- }
- newElem = newElem->ptr;
- }
- }
-
- FabWindowPtr GetFabWindowPtr(DialogRef d)
- {
- FabWList *newElem = startOfWList.ptr;
-
- while (newElem) {
- if (newElem->d == d) {
- return newElem->f;
- }
- newElem = newElem->ptr;
- }
- return nil;
- }
-
- void InitFabWListManager(void)
- {
- ffree(fmalloc(sizeof(struct fabwlist)));
- }
-
-